package com.robertux.leaderboard.util.gestoresModelos;

import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;

import org.apache.log4j.Logger;

import com.robertux.leaderboard.beans.entities.PuntosVenta;

public class GestorPuntosVentas {
	private GestorEntidades<PuntosVenta> gestorPuntos;
	private Logger logger;
	
	public GestorPuntosVentas() {
		this.gestorPuntos = new GestorEntidades<PuntosVenta>();
		this.logger = Logger.getLogger(this.getClass());
	}
	
	public GestorPuntosVentas(GestorEntidades<PuntosVenta> gestor) {
		this.gestorPuntos = gestor;
		this.logger = Logger.getLogger(this.getClass());
	}
	
	public List<PuntosVenta> getPuntos() {
		TypedQuery<PuntosVenta> qry = this.gestorPuntos.getEntityManager().createQuery("SELECT puntos FROM PuntosVenta puntos ORDER BY puntos.id", PuntosVenta.class);
		
		try {
			return qry.getResultList();
		} catch (Exception e) {
			this.logger.error("Error tratando de consultar los puntos por ventas: " + e.getMessage(), e);
			return null;
		}
	}
	
	public PuntosVenta getPuntos(int id) {
		return this.gestorPuntos.getEntidad("PuntosVenta", PuntosVenta.class, id);
	}
	
	public PuntosVenta getPuntosPorVentas(int grupoProductoId) {
		TypedQuery<PuntosVenta> qry = this.gestorPuntos.getEntityManager().createQuery("SELECT puntos FROM PuntosVenta puntos WHERE puntos.grupoProducto.id = :gPrdId", PuntosVenta.class);
		qry.setParameter("gPrdId", grupoProductoId);
		
		try {
			return qry.getSingleResult();
		} catch (NoResultException nrE) {
			return null;
		} catch (Exception e) {
			this.logger.error("Error tratando de consultar los puntos por ventas: " + e.getMessage(), e);
			return null;
		}
	}
	
	public boolean agregarPuntosVenta(PuntosVenta puntos) {
		try {
			this.gestorPuntos.persistir(puntos);
			return true;
		} catch (Exception e) {
			this.logger.error("Error tratando de persistir los puntos por ventas: " + e.getMessage(), e);
			return false;
		}
	}
	
	public boolean actualizarPuntosVenta(PuntosVenta puntos) {
		try {
			this.gestorPuntos.actualizar(puntos);
			return true;
		} catch (Exception e) {
			this.logger.error("Error tratando de actualizar los de puntos por ventas: " + e.getMessage(), e);
			return false;
		}
	}
	
	public boolean delPuntosVenta(PuntosVenta puntos) {
		try {
			this.gestorPuntos.eliminar(puntos);
			return true;
		} catch (Exception e) {
			this.logger.error("Error tratando de eliminar los de puntos por ventas: " + e.getMessage(), e);
			return false;
		}
	}
}
